home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / C / Applications / Python 1.4 / Python 1.4 source / Mac / Tools / BBPy / PythonSlave.py next >
Encoding:
Python Source  |  1996-09-19  |  3.2 KB  |  130 lines  |  [TEXT/Pyth]

  1. """PythonSlave.py
  2. An application that responds to three types of apple event: 
  3.     'pyth'/'EXEC':     execute direct parameter as Python
  4.     'aevt', 'quit':    quit
  5.     'aevt', 'odoc':    perform python scripts
  6.  
  7. Copyright © 1996, Just van Rossum, Letterror
  8. """
  9.  
  10. __version__ = "0.1.2"
  11.  
  12. import FrameWork
  13. import sys
  14. import traceback
  15. import aetools
  16. import string
  17. import AE
  18. import EasyDialogs
  19. import os
  20. import Qd
  21. from Types import *
  22. from Events import charCodeMask, cmdKey
  23. import MacOS
  24. import Evt
  25.  
  26. def dummyfunc(): pass
  27.  
  28. modulefilename = dummyfunc.func_code.co_filename
  29.  
  30. def Interact(timeout = 50000000):            # timeout after 10 days...
  31.     AE.AEInteractWithUser(timeout)
  32.  
  33.  
  34. class PythonSlave(FrameWork.Application):
  35.     def __init__(self):
  36.         FrameWork.Application.__init__(self)
  37.         AE.AEInstallEventHandler('pyth', 'EXEC', ExecHandler)
  38.         AE.AEInstallEventHandler('aevt', 'quit', QuitHandler)
  39.         AE.AEInstallEventHandler('aevt', 'odoc', OpenDocumentHandler)
  40.     
  41.     def makeusermenus(self):
  42.         self.filemenu = m = FrameWork.Menu(self.menubar, "File")
  43.         self._quititem = FrameWork.MenuItem(m, "Quit", "Q", self._quit)
  44.     
  45.     def do_kHighLevelEvent(self, event):
  46.         (what, message, when, where, modifiers) = event
  47.         try:
  48.             AE.AEProcessAppleEvent(event)
  49.         except AE.Error, detail:
  50.             print "Apple Event was not handled, error:", detail
  51.     
  52.     def do_key(self, event):
  53.         (what, message, when, where, modifiers) = event
  54.         c = chr(message & charCodeMask)
  55.         if modifiers & cmdKey and c == '.':
  56.             return
  57.         FrameWork.Application.do_key(self, event)
  58.     
  59.     def idle(self, event):
  60.         Qd.InitCursor()
  61.     
  62.     def quit(self, *args):
  63.         raise self
  64.     
  65.     def getabouttext(self):
  66.         return "About PythonSlave…"
  67.     
  68.     def do_about(self, id, item, window, event):
  69.         EasyDialogs.Message("PythonSlave " + __version__ + "\rCopyright © 1996, Letterror, JvR")
  70.     
  71.  
  72. def ExecHandler(theAppleEvent, theReply):
  73.     parameters, args = aetools.unpackevent(theAppleEvent)
  74.     if parameters.has_key('----'):
  75.         if parameters.has_key('NAME'):
  76.             print '--- executing "' + parameters['NAME'] + '" ---'
  77.         else:
  78.             print '--- executing "<unknown>" ---'
  79.         stuff = parameters['----']
  80.         MyExec(stuff + "\n")            # execute input
  81.         print '--- done ---'
  82.     return 0
  83.  
  84. def MyExec(stuff):
  85.     stuff = string.splitfields(stuff, '\r')    # convert return chars
  86.     stuff = string.joinfields(stuff, '\n')    # to newline chars
  87.     Interact()
  88.     saveyield = MacOS.EnableAppswitch(1)
  89.     try:
  90.         exec stuff
  91.     except:
  92.         MacOS.EnableAppswitch(saveyield)
  93.         traceback.print_exc()
  94.     MacOS.EnableAppswitch(saveyield)
  95.  
  96. def OpenDocumentHandler(theAppleEvent, theReply):
  97.     parameters, args = aetools.unpackevent(theAppleEvent)
  98.     docs = parameters['----']
  99.     if type(docs) <> ListType:
  100.         docs = [docs]
  101.     for doc in docs:
  102.         fss, a = doc.Resolve()
  103.         path = fss.as_pathname()
  104.         if path <> modulefilename:
  105.             MyExecFile(path)
  106.     return 0
  107.  
  108. def MyExecFile(path):
  109.     saveyield = MacOS.EnableAppswitch(1)
  110.     savewd = os.getcwd()
  111.     os.chdir(os.path.split(path)[0])
  112.     print '--- Executing file "' + os.path.split(path)[1] + '"'
  113.     try:
  114.         execfile(path, {"__name__": "__main__"})
  115.     except:
  116.         traceback.print_exc()
  117.         MacOS.EnableAppswitch(saveyield)
  118.     MacOS.EnableAppswitch(saveyield)
  119.     os.chdir(savewd)
  120.     print "--- done ---"
  121.  
  122. def QuitHandler(theAppleEvent, theReply):
  123.     slave.quit()
  124.     return 0
  125.  
  126.  
  127. slave = PythonSlave()
  128. print "PythonSlave", __version__, "ready."
  129. slave.mainloop()
  130.